在Node.js中如何逐行读取文件

您所在的位置:网站首页 nodejs writefile只能写入几千行 在Node.js中如何逐行读取文件

在Node.js中如何逐行读取文件

2024-07-15 15:06:05| 来源: 网络整理| 查看: 265

在Node.js中如何逐行读取文件

本文翻译自How to read a file line by line in Node.js

能够逐行读取文件为我们提供了一个读取大型文件的机会,而无需将它们完全加载到内存中。 它还允许我们仅查找相关信息,并在找到该信息后停止搜索。

我们已经讨论了如何在Java中逐行读取文件,让我们看一下Node.js逐行读取文件的方式。

FS模块

在Node.js中逐行读取文件的最简单方法是使用本地fs模块的fs.readFileSync()方法:

代码语言:javascript复制const fs = require('fs'); try { // read contents of the file const data = fs.readFileSync('file.txt', 'UTF-8'); // split the contents by new line const lines = data.split(/\r?\n/); // print all lines lines.forEach((line) => { console.log(line); }); } catch (err) { console.error(err); }

此方法将文件的全部内容同步读取到内存中,然后通过换行符拆分其内容。 乍看起来,它看起来很完美,但是有两个问题:

1.它是阻塞的,这意味着它将阻塞程序的执行,直到将整个文件加载到内存中为止。2.如果文件很大(千兆字节或更多),将对内存消耗产生严重影响。 通过使用非阻塞版本fs.readFile()可以解决第一个问题,但是在生产环境中,您不需要执行将整个文件读入内存的操作。

但是,如果您只想读取小文件,则可以正常工作。

Readline模块

Readline是另一个Node.js本机模块,是专门为此目的开发的-从任何readable stream中一次读取一行。 您甚至可以使用此模块从命令行读取输入数据。

这是您可以在代码中访问它的方式(无需安装):

代码语言:javascript复制const readline = require('readline');

由于readline模块适用于可读流,因此我们必须首先使用fs模块创建流,如下所示:

代码语言:javascript复制const rl = readline.createInterface({ input: fs.createReadStream('file.txt'), output: process.stdout, terminal: false });

现在,我们可以侦听rl对象上的line事件,该事件将在从流中读取新行时触发:

代码语言:javascript复制rl.on('line', (line) => { console.log(line); });

完整的代码如下所示:

代码语言:javascript复制const fs = require('fs'); const readline = require('readline'); const rl = readline.createInterface({ input: fs.createReadStream('file.txt'), output: process.stdout, terminal: false }); rl.on('line', (line) => { console.log(line); });Line-Reader模块

line-reader是一个开源模块,用于在Node.js中逐行读取文件。 您可以通过在终端中运行以下命令将其添加到项目中:

代码语言:javascript复制$ npm i line-reader --save

如果使用的是yarn,可以通过在终端中运行以下命令将其添加到项目中:

代码语言:javascript复制$ yarn add line-reader

line-reader模块提供了eachLine()方法,该方法读取给定文件的每一行。 它需要一个带有两个参数的回调函数:行内容和一个布尔值,指定读取的行是否为文件的最后一行。 这是一个例子:

代码语言:javascript复制const lineReader = require('line-reader'); lineReader.eachLine('file.txt', (line, last) => { console.log(line); });

使用此模块的另一个好处是,当某些情况变为真时,停止读取。 可以通过从回调函数返回false来实现:

代码语言:javascript复制const lineReader = require('line-reader'); lineReader.eachLine('file.txt', (line) => { console.log(line); // stop if line contains `NEW` if(line.includes('NEW')) { // stop reading and close the file return false; } });LineByLine模块

linebyline是另一个开放源代码库,可用于在Node.js中逐行读取文件。

让我们将其添加到您的项目中:

代码语言:javascript复制$ npm i linebyline --save

这个包简单地在内部流本机readline模块,读取和缓冲新行,为每行发出一个行事件:

代码语言:javascript复制const readline = require('linebyline'); // read all lines rl = readline('file.txt'); // listen for `line` event rl.on('line', (line, lineCount, byteCount) => { console.log(line); }).on('error', (err) => { console.error(err); });


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭